{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# `saturate` (有 bug)\n",
    "\n",
    "实现很简单："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tvm\n",
    "from tvm import te, topi\n",
    "\n",
    "# topi.hexagon.saturate 有实现\n",
    "def saturate(x: te.Tensor, dtype: str):\n",
    "    \"\"\"Saturate value for the specified data type\"\"\"\n",
    "    return te.max(te.min_value(dtype), te.min([x, te.max_value(dtype)]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`saturate` 的函数，它接受两个参数：类型为`te.Tensor` 的张量 `x` 和字符串类型的数据类型 `dtype`。函数的作用是计算并返回饱和值，即在给定的数据类型范围内对输入张量 `x` 进行截断。\n",
    "\n",
    "具体来说，函数首先使用 `te.min_value(dtype)` 获取给定数据类型的最小值，然后使用 `te.max(te.min_value(dtype), te.min(x, te.max_value(dtype)))` 计算饱和值。这里，`te.min(x, te.max_value(dtype))` 确保了输入张量 `x` 中的每个元素都不会超过给定数据类型的最大值。然后，`te.max(te.min_value(dtype), ...)` 确保了结果不会低于给定数据类型的最小值。\n",
    "\n",
    "总之，这个函数的作用是将输入张量 `x` 的值限制在给定数据类型的范围内，并返回截断后的结果。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tvmz",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
